package com.b2mining.integration.client.txt;
import org.apache.log4j.Logger;
import com.b2mining.integration.beans.Detraccion;
import com.b2mining.integration.beans.DetraccionItem;
import com.b2mining.integration.beans.Invoice;
import com.b2mining.integration.beans.InvoiceItem;
import com.b2mining.integration.beans.Retention;
import com.b2mining.integration.beans.RetentionItem;
import com.b2mining.integration.beans.XMLBean;
import com.b2mining.integration.helper.Constantes;
import com.b2mining.integration.helper.Helper;

public abstract class TXTMapper {

	public Logger log = Logger.getLogger(this.getClass());
	public Helper h=new Helper();
	 public abstract void generateTXT(XMLBean bean, java.io.Writer stream) throws TXTMapperException;
	   
	 public abstract XMLBean parseTXT(java.io.Reader stream)throws TXTMapperException;
	 
	 public boolean ValidarTiposdatos(Object o1,Object o2){
		// boolean respta=false;
		 int varx=0;
		 if(o1 instanceof Retention){
			 if ((((Retention) o1).getTotalMontoPago()!=null)&& !((Retention) o1).getTotalMontoPago().toString().trim().equalsIgnoreCase("")){
				try {
					varx=h.validaDatoDouble(((Retention) o1).getTotalMontoPago());
				} catch (Exception e) {
					return false;
				}
			 } 
				
			 if ((((Retention) o1).getTotalMontoRetencion()!=null) && !((Retention) o1).getTotalMontoRetencion().toString().trim().equalsIgnoreCase("")){
				 try {
						varx=h.validaDatoDouble(((Retention) o1).getTotalMontoRetencion());
				 } catch (Exception e) {
						return false;
				 }
			 }
			 
			 if ((((Retention) o1).getTotalMontoOrigen()!=null) && !((Retention) o1).getTotalMontoOrigen().toString().trim().equalsIgnoreCase("")){

				try {
					varx=h.validaDatoDouble(((Retention) o1).getTotalMontoOrigen());
				} catch (Exception e) {
					return false;
				}
			 } 
			 
			 if ((((Retention) o1).getFechaRetencion()!=null) && !((Retention) o1).getFechaRetencion().toString().trim().equalsIgnoreCase("")){

				 try {
						varx=h.validaFecha(((Retention) o1).getFechaRetencion());
					} catch (Exception e) {
						return false;
					}
			 } 
			 
			 if (((Retention) o1).getIdRetention()!=0) /*&& !((Retention) o1).getIdRetention().equalsIgnoreCase(""))*/
			 {

				 try {
						varx=h.validaDatoDouble(((Retention) o1).getTotalMontoOrigen());
					} catch (Exception e) {
						return false;
					}
			 }
			 
		 }else if(o1 instanceof Detraccion){
			 if ((((Detraccion) o1).getMontoDeposito()!=0)/*&& !((Detraccion) o1).getMontoDeposito().equalsIgnoreCase("")*/){

				 try {
						varx=h.validaDatoDouble(((Retention) o1).getTotalMontoPago());
					} catch (Exception e) {
						return false;
					}
			 }
			
			 if ((((Detraccion) o1).getIdDetraccion()!=0)/*&& !((Detraccion) o1).getIdDetraccion().toString().trim().equalsIgnoreCase("")*/){

				 try {
						varx=h.validaDatoDouble(((Retention) o1).getTotalMontoPago());
					} catch (Exception e) {
						return false;
					}
			 }
			 
			 if ((((Detraccion) o1).getFechaHoraPago()!=null) && !((Detraccion) o1).getFechaHoraPago().toString().equalsIgnoreCase("")){

				 try {
						varx=h.validaFecha(((Retention) o1).getFechaRetencion());
					} catch (Exception e) {
						return false;
					}
			 }
		 }else if(o1 instanceof Invoice){
			 if ((((Invoice) o1).getFechaCambioEstado()!=null) && !((Invoice) o1).getFechaCambioEstado().toString().equalsIgnoreCase("")){

				 try {
						varx=h.validaFecha(((Invoice) o1).getFechaCambioEstado());
					} catch (Exception e) {
						return false;
					}
			 }
			
			 if ((((Invoice) o1).getFechaCreacion()!=null) && !((Invoice) o1).getFechaCreacion().toString().equalsIgnoreCase("")){

				 try {
						varx=h.validaFecha(((Invoice) o1).getFechaCreacion());
					} catch (Exception e) {
						return false;
					}
			 }
			 if ((((Invoice) o1).getFechaEmision()!=null) && !((Invoice) o1).getFechaEmision().toString().equalsIgnoreCase("")){

				 try {
						varx=h.validaFecha(((Invoice) o1).getFechaEmision());
					} catch (Exception e) {
						return false;
					}
			 }
			 if ((((Invoice) o1).getFechaEnvio()!=null) && !((Invoice) o1).getFechaEnvio().toString().equalsIgnoreCase("")){

				 try {
						varx=h.validaFecha(((Invoice) o1).getFechaEnvio());
					} catch (Exception e) {
						return false;
					}
			 }
			 if ((((Invoice) o1).getFechaPago()!=null) && !((Invoice) o1).getFechaPago().toString().equalsIgnoreCase("")){

				 try {
						varx=h.validaFecha(((Invoice) o1).getFechaPago());
					} catch (Exception e) {
						return false;
					}
			 }
			 
			 if ((((Invoice) o1).getFechaProgPago()!=null) && !((Invoice) o1).getFechaProgPago().toString().equalsIgnoreCase("")){

				 try {
						varx=h.validaFecha(((Invoice) o1).getFechaProgPago());
					} catch (Exception e) {
						return false;
					}
			 }
			 
			 if ((((Invoice) o1).getFechaRecepcion()!=null) && !((Invoice) o1).getFechaRecepcion().toString().equalsIgnoreCase("")){
					
				 try {
						varx=h.validaFecha(((Invoice) o1).getFechaRecepcion());
					} catch (Exception e) {
						return false;
					}
			 }
			 
			 if ((((Invoice) o1).getFechaVencimiento()!=null) && !((Invoice) o1).getFechaVencimiento().toString().equalsIgnoreCase("")){
				
				 try {
						varx=h.validaFecha(((Invoice) o1).getFechaVencimiento());
					} catch (Exception e) {
						return false;
					}
			 }
		 }
		 return true;
			
	 }
	 
	 public boolean ValidarObligatorios(Object o1,Object o2) {
	       log.debug("Entro a ValidarObligatorios");
	       
	       if(o1 instanceof Retention){
	           log.debug("Es una instancia de retencion");
	           Retention retention = new Retention();
	           retention = (Retention)o1;
	           
	           if(retention!=null){
	                retention.setMensajeError("");
	               if(retention.getSerieRetencion()==null || retention.getSerieRetencion().trim().equalsIgnoreCase("")){
	                   log.info(Constantes.ERROR_RETENCION_SERIERETENCION);
	                   retention.setMensajeError(Constantes.ERROR_RETENCION_SERIERETENCION+";");
	               }
	               if(retention.getNumRetencion()==null || retention.getNumRetencion().trim().equalsIgnoreCase("")){
	                   log.info(Constantes.ERROR_RETENCION_NUMERORETENCION);
	                   retention.setMensajeError(retention.getMensajeError()+Constantes.ERROR_RETENCION_NUMERORETENCION+";");
	               }
	               if(retention.getRucComprador()==null || retention.getRucComprador().trim().equalsIgnoreCase("")){
	                   log.info(Constantes.ERROR_RETENCION_RUCCOMPRADOR);
	                   retention.setMensajeError(retention.getMensajeError()+Constantes.ERROR_RETENCION_RUCCOMPRADOR+";");
	               }
	               if(retention.getRucProveedor()==null || retention.getRucProveedor().trim().equalsIgnoreCase("")){
	                   log.info(Constantes.ERROR_RETENCION_RUCPROVEEDOR);
	                   retention.setMensajeError(retention.getMensajeError()+Constantes.ERROR_RETENCION_RUCPROVEEDOR+";");
	               }
	               /*if(retention.getRazonSocialProveedor()==null || retention.getRazonSocialProveedor().trim().equalsIgnoreCase("")){
	                   log.info(Constantes.ERROR_RETENCION_RAZONSOCIALPROVEEDOR);
	                   retention.setMensajeError(retention.getMensajeError()+Constantes.ERROR_RETENCION_RAZONSOCIALPROVEEDOR+";");
	               }
	               if(retention.getDireccionProveedor()==null || retention.getDireccionProveedor().trim().equalsIgnoreCase("")){
//	                   log.info(Constantes.ERROR_RETENCION_DIRECCIONPROVEEDOR);
//	                   retention.setMensajeError(retention.getMensajeError()+Constantes.ERROR_RETENCION_DIRECCIONPROVEEDOR+";");
	                    retention.setDireccionProveedor(Constantes.DIRECCION_LIMA);
	               }*/
	                
	               if(retention.getFechaRetencion()==null || retention.getFechaRetencion().toString().trim().equalsIgnoreCase("")){
	                   log.info(Constantes.ERROR_RETENCION_FECHA);
	                   retention.setMensajeError(retention.getMensajeError()+Constantes.ERROR_RETENCION_FECHA+";");
	               }

	               if(retention.getTotalMontoPago()==null || retention.getTotalMontoRetencion().toString().trim().equalsIgnoreCase("")){
	                   log.info(Constantes.ERROR_RETENCION_TOTALMONTOPAGO);
	                   retention.setMensajeError(retention.getMensajeError()+Constantes.ERROR_RETENCION_TOTALMONTOPAGO+";");
	               }

	               if(retention.getTotalMontoRetencion()==null || retention.getTotalMontoRetencion().toString().trim().equalsIgnoreCase("")){
	                   log.info(Constantes.ERROR_RETENCION_TOTALMONTORETENIDO);
	                   retention.setMensajeError(retention.getMensajeError()+Constantes.ERROR_RETENCION_TOTALMONTORETENIDO+";");
	               }

	               if(retention.getMoneda()==null || retention.getMoneda().toString().trim().equalsIgnoreCase("")){
	                   log.info(Constantes.ERROR_RETENCION_MONEDA);
	                   retention.setMensajeError(retention.getMensajeError()+Constantes.ERROR_RETENCION_MONEDA+";");
	               }
	               if(retention.getItemCount()==0){
	                   log.info(Constantes.ERROR_RETENCION_DETALLERETENCION);
	                   retention.setMensajeError(retention.getMensajeError()+Constantes.ERROR_RETENCION_DETALLERETENCION+";");
	               }
	               else{
	                   RetentionItem item = new RetentionItem();
	                   //Como si hay items verificaremos que los items tengan los campos obligatorios
	                   for(int i=0;i<retention.getItemCount();i++){
	                       log.debug("detalle nro " + i);

	                       item = new RetentionItem();
	                       item = (RetentionItem)retention.getItem(i);

	                       if(item!=null){
	                           if(item.getTipoDocumento()==null || item.getTipoDocumento().trim().equalsIgnoreCase("")){
	                               log.info(Constantes.ERROR_RETENCION_TIPODOCUMENTO);
	                                retention.setMensajeError(retention.getMensajeError()+Constantes.ERROR_RETENCION_TIPODOCUMENTO+";");
	                           }
	                           if(item.getSerieDocumento()==null || item.getSerieDocumento().trim().equalsIgnoreCase("")){
	                               log.info(Constantes.ERROR_RETENCION_SERIEDOCUMENTO);
	                               retention.setMensajeError(retention.getMensajeError()+Constantes.ERROR_RETENCION_SERIEDOCUMENTO+";");
	                           }
	                           if(item.getNumeroDocumento()==null || item.getNumeroDocumento().trim().equalsIgnoreCase("")){
	                               log.info(Constantes.ERROR_RETENCION_NUMERODOCUMENTO);
	                               retention.setMensajeError(retention.getMensajeError()+Constantes.ERROR_RETENCION_NUMERODOCUMENTO+";");
	                           }
	                           if(item.getFechaDocumento()==null || item.getFechaDocumento().toString().trim().equalsIgnoreCase("")){
	                               log.info(Constantes.ERROR_RETENCION_FECHADOCUMENTO);
	                               retention.setMensajeError(retention.getMensajeError()+Constantes.ERROR_RETENCION_FECHADOCUMENTO+";");
	                           }
	                           if(item.getMontoPago()==null || item.getMontoPago().toString().trim().equalsIgnoreCase("")){
	                               log.info(Constantes.ERROR_RETENCION_MONTOPAGO);
	                               retention.setMensajeError(retention.getMensajeError()+Constantes.ERROR_RETENCION_MONTOPAGO+";");
	                           }
	                           if(item.getMontoRetenido()==null || item.getMontoRetenido().toString().trim().equalsIgnoreCase("")){
	                               log.info(Constantes.ERROR_RETENCION_MONTORETENIDO);
	                               retention.setMensajeError(retention.getMensajeError()+Constantes.ERROR_RETENCION_MONTORETENIDO+";");
	                           }
	                           if(item.getMoneda()==null || item.getMoneda().toString().trim().equalsIgnoreCase("")){
	                               log.info(Constantes.ERROR_RETENCION_MONEDA);
	                               retention.setMensajeError(retention.getMensajeError()+Constantes.ERROR_RETENCION_MONEDA+";");
	                           }
	                       }
	                       else{
	                           log.debug("No tiene items la retencion");
	                       }
	                   }
	               }
	           }
	           /*else{
	               log.debug("Error en parsear de objeto a bean");
	           }*/
//	           if (retention.getMensajeError().equalsIgnoreCase("")||retention.getMensajeError()==null){
	        	   return true;
//	           }
//	           else{
//	        	   return false;
//	           }
	           
	       }else if(o1 instanceof Detraccion){
	            log.debug("Es una instancia de detraccion");
	            Detraccion detraccion = new Detraccion();
	            detraccion = (Detraccion)o1;

	            if(detraccion!=null){
	                detraccion.setMensajeError("");

	               if(detraccion.getRucComprador()==null || detraccion.getRucComprador().trim().equalsIgnoreCase("")){
	                   log.info(Constantes.ERROR_DETRACCION_RUCCOMPRADOR);
	                   detraccion.setMensajeError(Constantes.ERROR_DETRACCION_RUCCOMPRADOR+";");
	               }
	               if(detraccion.getRucProveedor()==null || detraccion.getRucProveedor().trim().equalsIgnoreCase("")){
	                   log.info(Constantes.ERROR_DETRACCION_RUCPROVEEDOR);
	                   detraccion.setMensajeError(detraccion.getMensajeError()+Constantes.ERROR_DETRACCION_RUCPROVEEDOR+";");
	               }
	              /* if(detraccion.getDireccionProveedor()==null || detraccion.getDireccionProveedor().trim().equalsIgnoreCase("")){
//	                   log.info(Constantes.ERROR_DETRACCION_DIRECCIONPROVEEDOR);
//	                   detraccion.setMensajeError(detraccion.getMensajeError()+Constantes.ERROR_DETRACCION_DIRECCIONPROVEEDOR+";");
	                   detraccion.setDireccionProveedor(Constantes.DIRECCION_LIMA);
	               }
	               if(detraccion.getRazonSocialProveedor()==null || detraccion.getRazonSocialProveedor().trim().equalsIgnoreCase("")){
	                   log.info(Constantes.ERROR_DETRACCION_RAZONSOCIALPROVEEDOR);
	                   detraccion.setMensajeError(detraccion.getMensajeError()+Constantes.ERROR_DETRACCION_RAZONSOCIALPROVEEDOR+";");
	               }*/
	               if(detraccion.getNumeroConstancia()==null || detraccion.getNumeroConstancia().trim().equalsIgnoreCase("")){
	                   log.info(Constantes.ERROR_DETRACCION_NUMEROCONSTANCIA);
	                   detraccion.setMensajeError(detraccion.getMensajeError()+Constantes.ERROR_DETRACCION_NUMEROCONSTANCIA+";");
	               }
	               if(detraccion.getNumCuentaNacionProveedor()==null || detraccion.getNumCuentaNacionProveedor().trim().equalsIgnoreCase("")){
	                   log.info(Constantes.ERROR_DETRACCION_NUMEROCUENTANACIONPROVEEDOR);
	                   detraccion.setMensajeError(detraccion.getMensajeError()+Constantes.ERROR_DETRACCION_NUMEROCUENTANACIONPROVEEDOR+";");
	               }
	               if(detraccion.getTipoOperacion()==null || detraccion.getTipoOperacion().trim().equalsIgnoreCase("")){
	                   log.info(Constantes.ERROR_DETRACCION_TIPOOPERACION);
	                   detraccion.setMensajeError(detraccion.getMensajeError()+Constantes.ERROR_DETRACCION_TIPOOPERACION+";");
	               }
	               if(detraccion.getTipoBienServicio()==null || detraccion.getTipoBienServicio().trim().equalsIgnoreCase("")){
	                   log.info(Constantes.ERROR_DETRACCION_TIPOBIENSERVICIO);
	                   detraccion.setMensajeError(detraccion.getMensajeError()+Constantes.ERROR_DETRACCION_TIPOBIENSERVICIO+";");
	               }
	               if(detraccion.getMontoDeposito()==0/*|| (String)detraccion.getMontoDeposito().toString().trim().equalsIgnoreCase("")*/){
	                   log.info(Constantes.ERROR_DETRACCION_MONTODEPOSITO);
	                   detraccion.setMensajeError(detraccion.getMensajeError()+Constantes.ERROR_DETRACCION_MONTODEPOSITO+";");
	               }
	               if(detraccion.getMoneda()==null || detraccion.getMoneda().trim().equalsIgnoreCase("")){
	                   log.info(Constantes.ERROR_DETRACCION_MONEDA);
	                   detraccion.setMensajeError(detraccion.getMensajeError()+Constantes.ERROR_DETRACCION_MONEDA+";");
	               }
	               if(detraccion.getFechaHoraPago()==null || detraccion.getFechaHoraPago().toString().trim().equalsIgnoreCase("")){
	                   log.info(Constantes.ERROR_DETRACCION_FECHAHORAPAGO);
	                   detraccion.setMensajeError(detraccion.getMensajeError()+Constantes.ERROR_DETRACCION_FECHAHORAPAGO+";");
	               }
	               if(detraccion.getItemCount()==0){
	                   log.info(Constantes.ERROR_DETRACCION_DETALLEDETRACCION);
	                   detraccion.setMensajeError(detraccion.getMensajeError()+Constantes.ERROR_DETRACCION_DETALLEDETRACCION+";");
	               }
	               else{
	                   //Como si hay items entonces verificamos los campos obligatorios
	                   DetraccionItem item = new DetraccionItem();

	                   for(int i=0;i<detraccion.getItemCount();i++){
	                       log.debug("detalle nro " + i);

	                       item = new DetraccionItem();
	                       item = (DetraccionItem)detraccion.getItem(i);

	                       if(item!=null){
	                           if(item.getTipoDocumento()==null || item.getTipoDocumento().trim().equalsIgnoreCase("")){
	                               log.info(Constantes.ERROR_DETRACCION_TIPODOCUMENTO);
	                               detraccion.setMensajeError(detraccion.getMensajeError()+Constantes.ERROR_DETRACCION_TIPODOCUMENTO+";");
	                           }
	                           if(item.getSerieDocumento()==null || item.getSerieDocumento().trim().equalsIgnoreCase("")){
	                               log.info(Constantes.ERROR_DETRACCION_SERIEDOCUMENTO);
	                               detraccion.setMensajeError(detraccion.getMensajeError()+Constantes.ERROR_DETRACCION_SERIEDOCUMENTO+";");
	                           }
	                           if(item.getNumeroDocumento()==null || item.getNumeroDocumento().trim().equalsIgnoreCase("")){
	                               log.info(Constantes.ERROR_DETRACCION_NUMERODOCUMENTO);
	                               detraccion.setMensajeError(detraccion.getMensajeError()+Constantes.ERROR_DETRACCION_NUMERODOCUMENTO+";");
	                           }
	                           if(item.getFechaDocumento()==null || item.getFechaDocumento().toString().trim().equalsIgnoreCase("")){
	                               log.info(Constantes.ERROR_DETRACCION_FECHADOCUMENTO);
	                               detraccion.setMensajeError(detraccion.getMensajeError()+Constantes.ERROR_DETRACCION_FECHADOCUMENTO+";");
	                           }
	                           if(item.getMontoPago()==0/* || item.getMontoPago().toString().trim().equalsIgnoreCase("")*/){
	                               log.info(Constantes.ERROR_DETRACCION_MONTOPAGO);
	                               detraccion.setMensajeError(detraccion.getMensajeError()+Constantes.ERROR_DETRACCION_MONTOPAGO+";");
	                           }
	                           if(item.getMontoDetractado()==0/* || item.getMontoDetractado().toString().trim().equalsIgnoreCase("")*/){
	                                log.info(Constantes.ERROR_DETRACCION_MONTODETRACTADO);
	                                detraccion.setMensajeError(detraccion.getMensajeError()+Constantes.ERROR_DETRACCION_MONTODETRACTADO+";");
	                           }
	                           if(item.getMoneda()==null || item.getMoneda().toString().trim().equalsIgnoreCase("")){
	                                log.info(Constantes.ERROR_DETRACCION_MONEDADET);
	                                detraccion.setMensajeError(detraccion.getMensajeError()+Constantes.ERROR_DETRACCION_MONEDADET+";");
	                           }
	                       }
	                       else{
	                            log.info(Constantes.ERROR_DETRACCION_DETALLEDETRACCION);
	                            detraccion.setMensajeError(detraccion.getMensajeError()+Constantes.ERROR_DETRACCION_DETALLEDETRACCION+";");
	                       }
	                   }
	               }
	           }
	          /* else{
	               log.debug("Error en parsear de objeto a bean");
	           }*/
	           return true;
	           
	        }else if(o1 instanceof Invoice){

	           log.debug("Es una instancia de factura");

	           Invoice invoice = new Invoice();
	           //log.debug("1");
	           invoice = (Invoice)o1;
	           
	           if(invoice!=null){
	               invoice.setMensajeError("");
	               
	               if(invoice.getRucProveedor()==null || invoice.getRucProveedor().trim().equalsIgnoreCase("")){
	                    log.info(Constantes.ERROR_FACTURA_RUCPROVEEDOR);
	                    invoice.setMensajeError(invoice.getMensajeError()+Constantes.ERROR_FACTURA_RUCPROVEEDOR+";");
	               }
	               if(invoice.getRazonSocialProveedor()==null || invoice.getRazonSocialProveedor().trim().equalsIgnoreCase("")){
	                    log.info(Constantes.ERROR_RETENCION_RAZONSOCIALPROVEEDOR);
	                    invoice.setMensajeError(invoice.getMensajeError()+Constantes.ERROR_RETENCION_RAZONSOCIALPROVEEDOR+";");
	               }
	               if(invoice.getDireccionProveedor()==null || invoice.getDireccionProveedor().trim().equalsIgnoreCase("")){
	                    invoice.setDireccionProveedor(Constantes.DIRECCION_LIMA);
	               }
	               if(invoice.getNumeroFactura()==null || invoice.getNumeroFactura().trim().equalsIgnoreCase("")){
	                    log.info(Constantes.ERROR_FACTURA_NUMEROFACTURA);
	                    invoice.setMensajeError(invoice.getMensajeError()+Constantes.ERROR_FACTURA_NUMEROFACTURA+";");
	               }
//	               if(invoice.getNumeroOC()==null || invoice.getNumeroOC().trim().equalsIgnoreCase("")){
//	                    log.info(Constantes.ERROR_FACTURA_NUMEROOC);
//	                    invoice.setMensajeError(invoice.getMensajeError()+Constantes.ERROR_FACTURA_NUMEROOC+";");
//	               }
	               if(invoice.getRucCliente()==null || invoice.getRucCliente().trim().equalsIgnoreCase("")){
	                    log.info(Constantes.ERROR_FACTURA_RUCCLIENTE);
	                    invoice.setMensajeError(invoice.getMensajeError()+Constantes.ERROR_FACTURA_RUCCLIENTE+";");
	               }
	               if(invoice.getFechaEmision()==null || invoice.getFechaEmision().toString().trim().equalsIgnoreCase("")){
	                    log.info(Constantes.ERROR_FACTURA_FECHAEMISION);
	                    invoice.setMensajeError(invoice.getMensajeError()+Constantes.ERROR_FACTURA_FECHAEMISION+";");
	               }
	               /*if(invoice.getMoneda()==null || invoice.getMoneda().trim().equalsIgnoreCase("")){
	                    log.info(Constantes.ERROR_FACTURA_MONEDA);
	                    invoice.setMensajeError(invoice.getMensajeError()+Constantes.ERROR_FACTURA_MONEDA+";");
	               }*/
	               if(invoice.getSubTotal()==null || invoice.getSubTotal().toString().trim().equalsIgnoreCase("")){
	                    log.info(Constantes.ERROR_FACTURA_SUBTOTAL);
	                    invoice.setMensajeError(invoice.getMensajeError()+Constantes.ERROR_FACTURA_SUBTOTAL+";");
	               }
	               if(invoice.getImpuesto1()==null || invoice.getImpuesto1().toString().trim().equalsIgnoreCase("")){
	                    log.info(Constantes.ERROR_FACTURA_IMPUESTO1);
	                    invoice.setMensajeError(invoice.getMensajeError()+Constantes.ERROR_FACTURA_IMPUESTO1+";");
	               }
	               
	               log.debug("**********total: " + invoice.getTotal());
	               if(invoice.getTotal()==null || invoice.getTotal().toString().trim().equalsIgnoreCase("")){
	                    log.info(Constantes.ERROR_FACTURA_TOTAL);
	                    invoice.setMensajeError(invoice.getMensajeError()+Constantes.ERROR_FACTURA_TOTAL+";");
	               }
	               if(invoice.getObservaciones()==null || invoice.getObservaciones().toString().trim().equalsIgnoreCase("")){
	                    log.info(Constantes.ERROR_FACTURA_OBSERVACIONES);
	                    invoice.setMensajeError(invoice.getMensajeError()+Constantes.ERROR_FACTURA_TOTAL+";");
	               }
	               /*if(invoice.getPlazoPago()==null || invoice.getPlazoPago().toString().trim().equalsIgnoreCase("")){
	                    invoice.setPlazoPago(Constantes.CARACTER_ESPACIO);
	               }*/
	               if(invoice.getItemCount()==0 ){
	                    log.debug("No tiene Item, pero no es obligatorio");
	               }
	               else{
	                   //Como si hay items entonces verificamos los campos obligatorios
	                   //log.debug("4");
	                   InvoiceItem item = new InvoiceItem();
	                   // log.debug("5");
	                   for(int i=0;i<invoice.getItemCount();i++){
	                       //log.debug("detalle nro " + i);

	                       item = new InvoiceItem();
	                       item = (InvoiceItem)invoice.getItem(i);

	                       if(item!=null){
//	                           if(item.getNumGuiaItem()==null || item.getNumGuiaItem().toString().trim().equalsIgnoreCase("")){
//	                                log.info(Constantes.ERROR_FACTURA_NUMGUIAITEM);
//	                                invoice.setMensajeError(invoice.getMensajeError()+Constantes.ERROR_FACTURA_NUMGUIAITEM+";");
//	                           }
	                           if(item.getNumeroItemOC()==null || item.getNumeroItemOC().toString().trim().equalsIgnoreCase("")){
	                                log.info(Constantes.ERROR_FACTURA_NUMEROITEMOC);
	                                invoice.setMensajeError(invoice.getMensajeError()+Constantes.ERROR_FACTURA_NUMEROITEMOC+";");
	                           }
	                           if(item.getDescripcionItem()==null || item.getDescripcionItem().toString().trim().equalsIgnoreCase("")){
	                                log.info(Constantes.ERROR_FACTURA_DESCRIPCIONITEM);
	                                invoice.setMensajeError(invoice.getMensajeError()+Constantes.ERROR_FACTURA_DESCRIPCIONITEM+";");
	                           }
	                           if(item.getCantidadItem()==null || item.getCantidadItem().toString().trim().equalsIgnoreCase("")){
	                                log.info(Constantes.ERROR_FACTURA_CANTIDADITEM);
	                                invoice.setMensajeError(invoice.getMensajeError()+Constantes.ERROR_FACTURA_CANTIDADITEM+";");
	                           }
//	                           if(item.getUnidadMedidaItem()==null || item.getUnidadMedidaItem().toString().trim().equalsIgnoreCase("")){
//	                                log.info(Constantes.ERROR_FACTURA_UNIDADMEDIDAITEM);
//	                                invoice.setMensajeError(invoice.getMensajeError()+Constantes.ERROR_FACTURA_UNIDADMEDIDAITEM+";");
//	                           }
	                           if(item.getPrecioUnitario()==null || item.getPrecioUnitario().toString().trim().equalsIgnoreCase("")){
	                                log.info(Constantes.ERROR_FACTURA_PRECIOUNITARIO);
	                                invoice.setMensajeError(invoice.getMensajeError()+Constantes.ERROR_FACTURA_PRECIOUNITARIO+";");
	                           }
	                           if(item.getPrecioTotal()==null || item.getPrecioTotal().toString().trim().equalsIgnoreCase("")){
	                                log.info(Constantes.ERROR_FACTURA_PRECIOTOTAL);
	                                invoice.setMensajeError(invoice.getMensajeError()+Constantes.ERROR_FACTURA_PRECIOTOTAL+";");
	                           }
	                           if(item.getNumeroOCItem()==null || item.getNumeroOCItem().toString().trim().equalsIgnoreCase("")){
	                                log.info(Constantes.ERROR_FACTURA_NUMEROOCITEM);
	                                invoice.setMensajeError(invoice.getMensajeError()+Constantes.ERROR_FACTURA_NUMEROOCITEM+";");
	                           }
	                       }
	                   }
	               }
	           }
	           /*else{
	               log.debug("Error en validar campos obligatorios de Factura");
	           }*/
	           log.debug("Si llega hasta aca entonces retorna la invoice validada");
	           return true;
	           
	      }  
	       log.debug("Si llega hasta aca entonces todo ha ido bien");
	       return false;
	   }

	 public XMLBean ValidarCamposObligatorios(Object o1,Object o2) {
	       log.debug("Entro a ValidarObligatorios");

	       if(o1 instanceof Retention){
	           log.debug("Es una instancia de retencion");
	           Retention retention = new Retention();
	           retention = (Retention)o1;
	           
	           if(retention!=null){
	                retention.setMensajeError("");
	               if(retention.getSerieRetencion()==null || retention.getSerieRetencion().trim().equalsIgnoreCase("")){
	                   log.info(Constantes.ERROR_RETENCION_SERIERETENCION);
	                   retention.setMensajeError(Constantes.ERROR_RETENCION_SERIERETENCION+";");
	               }
	               if(retention.getNumRetencion()==null || retention.getNumRetencion().trim().equalsIgnoreCase("")){
	                   log.info(Constantes.ERROR_RETENCION_NUMERORETENCION);
	                   retention.setMensajeError(retention.getMensajeError()+Constantes.ERROR_RETENCION_NUMERORETENCION+";");
	               }
	               if(retention.getRucComprador()==null || retention.getRucComprador().trim().equalsIgnoreCase("")){
	                   log.info(Constantes.ERROR_RETENCION_RUCCOMPRADOR);
	                   retention.setMensajeError(retention.getMensajeError()+Constantes.ERROR_RETENCION_RUCCOMPRADOR+";");
	               }
	               if(retention.getRucProveedor()==null || retention.getRucProveedor().trim().equalsIgnoreCase("")){
	                   log.info(Constantes.ERROR_RETENCION_RUCPROVEEDOR);
	                   retention.setMensajeError(retention.getMensajeError()+Constantes.ERROR_RETENCION_RUCPROVEEDOR+";");
	               }
	               /*if(retention.getRazonSocialProveedor()==null || retention.getRazonSocialProveedor().trim().equalsIgnoreCase("")){
	                   log.info(Constantes.ERROR_RETENCION_RAZONSOCIALPROVEEDOR);
	                   retention.setMensajeError(retention.getMensajeError()+Constantes.ERROR_RETENCION_RAZONSOCIALPROVEEDOR+";");
	               }
	               if(retention.getDireccionProveedor()==null || retention.getDireccionProveedor().trim().equalsIgnoreCase("")){
//	                   log.info(Constantes.ERROR_RETENCION_DIRECCIONPROVEEDOR);
//	                   retention.setMensajeError(retention.getMensajeError()+Constantes.ERROR_RETENCION_DIRECCIONPROVEEDOR+";");
	                    retention.setDireccionProveedor(Constantes.DIRECCION_LIMA);
	               }*/
	                
	               if(retention.getFechaRetencion()==null || retention.getFechaRetencion().toString().trim().equalsIgnoreCase("")){
	                   log.info(Constantes.ERROR_RETENCION_FECHA);
	                   retention.setMensajeError(retention.getMensajeError()+Constantes.ERROR_RETENCION_FECHA+";");
	               }

	               if(retention.getTotalMontoPago()==null || retention.getTotalMontoRetencion().toString().trim().equalsIgnoreCase("")){
	                   log.info(Constantes.ERROR_RETENCION_TOTALMONTOPAGO);
	                   retention.setMensajeError(retention.getMensajeError()+Constantes.ERROR_RETENCION_TOTALMONTOPAGO+";");
	               }

	               if(retention.getTotalMontoRetencion()==null || retention.getTotalMontoRetencion().toString().trim().equalsIgnoreCase("")){
	                   log.info(Constantes.ERROR_RETENCION_TOTALMONTORETENIDO);
	                   retention.setMensajeError(retention.getMensajeError()+Constantes.ERROR_RETENCION_TOTALMONTORETENIDO+";");
	               }

	               if(retention.getMoneda()==null || retention.getMoneda().toString().trim().equalsIgnoreCase("")){
	                   log.info(Constantes.ERROR_RETENCION_MONEDA);
	                   retention.setMensajeError(retention.getMensajeError()+Constantes.ERROR_RETENCION_MONEDA+";");
	               }
	               if(retention.getItemCount()==0){
	                   log.info(Constantes.ERROR_RETENCION_DETALLERETENCION);
	                   retention.setMensajeError(retention.getMensajeError()+Constantes.ERROR_RETENCION_DETALLERETENCION+";");
	               }
	               else{
	                   RetentionItem item = new RetentionItem();
	                   //Como si hay items verificaremos que los items tengan los campos obligatorios
	                   for(int i=0;i<retention.getItemCount();i++){
	                       log.debug("detalle nro " + i);

	                       item = new RetentionItem();
	                       item = (RetentionItem)retention.getItem(i);

	                       if(item!=null){
	                           if(item.getTipoDocumento()==null || item.getTipoDocumento().trim().equalsIgnoreCase("")){
	                               log.info(Constantes.ERROR_RETENCION_TIPODOCUMENTO);
	                                retention.setMensajeError(retention.getMensajeError()+Constantes.ERROR_RETENCION_TIPODOCUMENTO+";");
	                           }
	                           if(item.getSerieDocumento()==null || item.getSerieDocumento().trim().equalsIgnoreCase("")){
	                               log.info(Constantes.ERROR_RETENCION_SERIEDOCUMENTO);
	                               retention.setMensajeError(retention.getMensajeError()+Constantes.ERROR_RETENCION_SERIEDOCUMENTO+";");
	                           }
	                           if(item.getNumeroDocumento()==null || item.getNumeroDocumento().trim().equalsIgnoreCase("")){
	                               log.info(Constantes.ERROR_RETENCION_NUMERODOCUMENTO);
	                               retention.setMensajeError(retention.getMensajeError()+Constantes.ERROR_RETENCION_NUMERODOCUMENTO+";");
	                           }
	                           if(item.getFechaDocumento()==null || item.getFechaDocumento().toString().trim().equalsIgnoreCase("")){
	                               log.info(Constantes.ERROR_RETENCION_FECHADOCUMENTO);
	                               retention.setMensajeError(retention.getMensajeError()+Constantes.ERROR_RETENCION_FECHADOCUMENTO+";");
	                           }
	                           if(item.getMontoPago()==null || item.getMontoPago().toString().trim().equalsIgnoreCase("")){
	                               log.info(Constantes.ERROR_RETENCION_MONTOPAGO);
	                               retention.setMensajeError(retention.getMensajeError()+Constantes.ERROR_RETENCION_MONTOPAGO+";");
	                           }
	                           if(item.getMontoRetenido()==null || item.getMontoRetenido().toString().trim().equalsIgnoreCase("")){
	                               log.info(Constantes.ERROR_RETENCION_MONTORETENIDO);
	                               retention.setMensajeError(retention.getMensajeError()+Constantes.ERROR_RETENCION_MONTORETENIDO+";");
	                           }
	                           if(item.getMoneda()==null || item.getMoneda().toString().trim().equalsIgnoreCase("")){
	                               log.info(Constantes.ERROR_RETENCION_MONEDA);
	                               retention.setMensajeError(retention.getMensajeError()+Constantes.ERROR_RETENCION_MONEDA+";");
	                           }
	                       }
	                       else{
	                           log.debug("No tiene items la retencion");
	                       }
	                   }
	               }
	           }
	          /* else{
	               log.debug("Error en parsear de objeto a bean");
	           }*/
	           return retention;
	       }
	       else if(o1 instanceof Detraccion){
	            log.debug("Es una instancia de detraccion");
	            Detraccion detraccion = new Detraccion();
	            detraccion = (Detraccion)o1;

	            if(detraccion!=null){
	                detraccion.setMensajeError("");

	               if(detraccion.getRucComprador()==null || detraccion.getRucComprador().trim().equalsIgnoreCase("")){
	                   log.info(Constantes.ERROR_DETRACCION_RUCCOMPRADOR);
	                   detraccion.setMensajeError(Constantes.ERROR_DETRACCION_RUCCOMPRADOR+";");
	               }
	               if(detraccion.getRucProveedor()==null || detraccion.getRucProveedor().trim().equalsIgnoreCase("")){
	                   log.info(Constantes.ERROR_DETRACCION_RUCPROVEEDOR);
	                   detraccion.setMensajeError(detraccion.getMensajeError()+Constantes.ERROR_DETRACCION_RUCPROVEEDOR+";");
	               }
	              /* if(detraccion.getDireccionProveedor()==null || detraccion.getDireccionProveedor().trim().equalsIgnoreCase("")){
//	                   log.info(Constantes.ERROR_DETRACCION_DIRECCIONPROVEEDOR);
//	                   detraccion.setMensajeError(detraccion.getMensajeError()+Constantes.ERROR_DETRACCION_DIRECCIONPROVEEDOR+";");
	                   detraccion.setDireccionProveedor(Constantes.DIRECCION_LIMA);
	               }
	               if(detraccion.getRazonSocialProveedor()==null || detraccion.getRazonSocialProveedor().trim().equalsIgnoreCase("")){
	                   log.info(Constantes.ERROR_DETRACCION_RAZONSOCIALPROVEEDOR);
	                   detraccion.setMensajeError(detraccion.getMensajeError()+Constantes.ERROR_DETRACCION_RAZONSOCIALPROVEEDOR+";");
	               }*/
	               if(detraccion.getNumeroConstancia()==null || detraccion.getNumeroConstancia().trim().equalsIgnoreCase("")){
	                   log.info(Constantes.ERROR_DETRACCION_NUMEROCONSTANCIA);
	                   detraccion.setMensajeError(detraccion.getMensajeError()+Constantes.ERROR_DETRACCION_NUMEROCONSTANCIA+";");
	               }
	               if(detraccion.getNumCuentaNacionProveedor()==null || detraccion.getNumCuentaNacionProveedor().trim().equalsIgnoreCase("")){
	                   log.info(Constantes.ERROR_DETRACCION_NUMEROCUENTANACIONPROVEEDOR);
	                   detraccion.setMensajeError(detraccion.getMensajeError()+Constantes.ERROR_DETRACCION_NUMEROCUENTANACIONPROVEEDOR+";");
	               }
	               if(detraccion.getTipoOperacion()==null || detraccion.getTipoOperacion().trim().equalsIgnoreCase("")){
	                   log.info(Constantes.ERROR_DETRACCION_TIPOOPERACION);
	                   detraccion.setMensajeError(detraccion.getMensajeError()+Constantes.ERROR_DETRACCION_TIPOOPERACION+";");
	               }
	               if(detraccion.getTipoBienServicio()==null || detraccion.getTipoBienServicio().trim().equalsIgnoreCase("")){
	                   log.info(Constantes.ERROR_DETRACCION_TIPOBIENSERVICIO);
	                   detraccion.setMensajeError(detraccion.getMensajeError()+Constantes.ERROR_DETRACCION_TIPOBIENSERVICIO+";");
	               }
	               if(detraccion.getMontoDeposito()==0/*|| (String)detraccion.getMontoDeposito().toString().trim().equalsIgnoreCase("")*/){
	                   log.info(Constantes.ERROR_DETRACCION_MONTODEPOSITO);
	                   detraccion.setMensajeError(detraccion.getMensajeError()+Constantes.ERROR_DETRACCION_MONTODEPOSITO+";");
	               }
	               if(detraccion.getMoneda()==null || detraccion.getMoneda().trim().equalsIgnoreCase("")){
	                   log.info(Constantes.ERROR_DETRACCION_MONEDA);
	                   detraccion.setMensajeError(detraccion.getMensajeError()+Constantes.ERROR_DETRACCION_MONEDA+";");
	               }
	               if(detraccion.getFechaHoraPago()==null || detraccion.getFechaHoraPago().toString().trim().equalsIgnoreCase("")){
	                   log.info(Constantes.ERROR_DETRACCION_FECHAHORAPAGO);
	                   detraccion.setMensajeError(detraccion.getMensajeError()+Constantes.ERROR_DETRACCION_FECHAHORAPAGO+";");
	               }
	               if(detraccion.getItemCount()==0){
	                   log.info(Constantes.ERROR_DETRACCION_DETALLEDETRACCION);
	                   detraccion.setMensajeError(detraccion.getMensajeError()+Constantes.ERROR_DETRACCION_DETALLEDETRACCION+";");
	               }
	               else{
	                   //Como si hay items entonces verificamos los campos obligatorios
	                   DetraccionItem item = new DetraccionItem();

	                   for(int i=0;i<detraccion.getItemCount();i++){
	                       log.debug("detalle nro " + i);

	                       item = new DetraccionItem();
	                       item = (DetraccionItem)detraccion.getItem(i);

	                       if(item!=null){
	                           if(item.getTipoDocumento()==null || item.getTipoDocumento().trim().equalsIgnoreCase("")){
	                               log.info(Constantes.ERROR_DETRACCION_TIPODOCUMENTO);
	                               detraccion.setMensajeError(detraccion.getMensajeError()+Constantes.ERROR_DETRACCION_TIPODOCUMENTO+";");
	                           }
	                           if(item.getSerieDocumento()==null || item.getSerieDocumento().trim().equalsIgnoreCase("")){
	                               log.info(Constantes.ERROR_DETRACCION_SERIEDOCUMENTO);
	                               detraccion.setMensajeError(detraccion.getMensajeError()+Constantes.ERROR_DETRACCION_SERIEDOCUMENTO+";");
	                           }
	                           if(item.getNumeroDocumento()==null || item.getNumeroDocumento().trim().equalsIgnoreCase("")){
	                               log.info(Constantes.ERROR_DETRACCION_NUMERODOCUMENTO);
	                               detraccion.setMensajeError(detraccion.getMensajeError()+Constantes.ERROR_DETRACCION_NUMERODOCUMENTO+";");
	                           }
	                           if(item.getFechaDocumento()==null || item.getFechaDocumento().toString().trim().equalsIgnoreCase("")){
	                               log.info(Constantes.ERROR_DETRACCION_FECHADOCUMENTO);
	                               detraccion.setMensajeError(detraccion.getMensajeError()+Constantes.ERROR_DETRACCION_FECHADOCUMENTO+";");
	                           }
	                           if(item.getMontoPago()==0/* || item.getMontoPago().toString().trim().equalsIgnoreCase("")*/){
	                               log.info(Constantes.ERROR_DETRACCION_MONTOPAGO);
	                               detraccion.setMensajeError(detraccion.getMensajeError()+Constantes.ERROR_DETRACCION_MONTOPAGO+";");
	                           }
	                           if(item.getMontoDetractado()==0/* || item.getMontoDetractado().toString().trim().equalsIgnoreCase("")*/){
	                                log.info(Constantes.ERROR_DETRACCION_MONTODETRACTADO);
	                                detraccion.setMensajeError(detraccion.getMensajeError()+Constantes.ERROR_DETRACCION_MONTODETRACTADO+";");
	                           }
	                           if(item.getMoneda()==null || item.getMoneda().toString().trim().equalsIgnoreCase("")){
	                                log.info(Constantes.ERROR_DETRACCION_MONEDADET);
	                                detraccion.setMensajeError(detraccion.getMensajeError()+Constantes.ERROR_DETRACCION_MONEDADET+";");
	                           }
	                       }
	                       else{
	                            log.info(Constantes.ERROR_DETRACCION_DETALLEDETRACCION);
	                            detraccion.setMensajeError(detraccion.getMensajeError()+Constantes.ERROR_DETRACCION_DETALLEDETRACCION+";");
	                       }
	                   }
	               }
	           }
	           /*else{
	               log.debug("Error en parsear de objeto a bean");
	           }*/
	           return detraccion;
	           
	        }
	       else if(o1 instanceof Invoice){
	           log.debug("Es una instancia de factura");

	           Invoice invoice = new Invoice();
	           //log.debug("1");
	           invoice = (Invoice)o1;
	           
	           if(invoice!=null){
	               invoice.setMensajeError("");
	               
	               if(invoice.getRucProveedor()==null || invoice.getRucProveedor().trim().equalsIgnoreCase("")){
	                    log.info(Constantes.ERROR_FACTURA_RUCPROVEEDOR);
	                    invoice.setMensajeError(invoice.getMensajeError()+Constantes.ERROR_FACTURA_RUCPROVEEDOR+";");
	               }
	               if(invoice.getRazonSocialProveedor()==null || invoice.getRazonSocialProveedor().trim().equalsIgnoreCase("")){
	                    log.info(Constantes.ERROR_RETENCION_RAZONSOCIALPROVEEDOR);
	                    invoice.setMensajeError(invoice.getMensajeError()+Constantes.ERROR_RETENCION_RAZONSOCIALPROVEEDOR+";");
	               }
	               if(invoice.getDireccionProveedor()==null || invoice.getDireccionProveedor().trim().equalsIgnoreCase("")){
	                    invoice.setDireccionProveedor(Constantes.DIRECCION_LIMA);
	               }
	               if(invoice.getNumeroFactura()==null || invoice.getNumeroFactura().trim().equalsIgnoreCase("")){
	                    log.info(Constantes.ERROR_FACTURA_NUMEROFACTURA);
	                    invoice.setMensajeError(invoice.getMensajeError()+Constantes.ERROR_FACTURA_NUMEROFACTURA+";");
	               }
//	               if(invoice.getNumeroOC()==null || invoice.getNumeroOC().trim().equalsIgnoreCase("")){
//	                    log.info(Constantes.ERROR_FACTURA_NUMEROOC);
//	                    invoice.setMensajeError(invoice.getMensajeError()+Constantes.ERROR_FACTURA_NUMEROOC+";");
//	               }
	               if(invoice.getRucCliente()==null || invoice.getRucCliente().trim().equalsIgnoreCase("")){
	                    log.info(Constantes.ERROR_FACTURA_RUCCLIENTE);
	                    invoice.setMensajeError(invoice.getMensajeError()+Constantes.ERROR_FACTURA_RUCCLIENTE+";");
	               }
	               if(invoice.getFechaEmision()==null || invoice.getFechaEmision().toString().trim().equalsIgnoreCase("")){
	                    log.info(Constantes.ERROR_FACTURA_FECHAEMISION);
	                    invoice.setMensajeError(invoice.getMensajeError()+Constantes.ERROR_FACTURA_FECHAEMISION+";");
	               }
	               /*if(invoice.getMoneda()==null || invoice.getMoneda().trim().equalsIgnoreCase("")){
	                    log.info(Constantes.ERROR_FACTURA_MONEDA);
	                    invoice.setMensajeError(invoice.getMensajeError()+Constantes.ERROR_FACTURA_MONEDA+";");
	               }*/
	               if(invoice.getSubTotal()==null || invoice.getSubTotal().toString().trim().equalsIgnoreCase("")){
	                    log.info(Constantes.ERROR_FACTURA_SUBTOTAL);
	                    invoice.setMensajeError(invoice.getMensajeError()+Constantes.ERROR_FACTURA_SUBTOTAL+";");
	               }
	               if(invoice.getImpuesto1()==null || invoice.getImpuesto1().toString().trim().equalsIgnoreCase("")){
	                    log.info(Constantes.ERROR_FACTURA_IMPUESTO1);
	                    invoice.setMensajeError(invoice.getMensajeError()+Constantes.ERROR_FACTURA_IMPUESTO1+";");
	               }
	               
	               log.debug("**********total: " + invoice.getTotal());
	               if(invoice.getTotal()==null || invoice.getTotal().toString().trim().equalsIgnoreCase("")){
	                    log.info(Constantes.ERROR_FACTURA_TOTAL);
	                    invoice.setMensajeError(invoice.getMensajeError()+Constantes.ERROR_FACTURA_TOTAL+";");
	               }
	               if(invoice.getObservaciones()==null || invoice.getObservaciones().toString().trim().equalsIgnoreCase("")){
	                    log.info(Constantes.ERROR_FACTURA_OBSERVACIONES);
	                    invoice.setMensajeError(invoice.getMensajeError()+Constantes.ERROR_FACTURA_TOTAL+";");
	               }
	               /*if(invoice.getPlazoPago()==null || invoice.getPlazoPago().toString().trim().equalsIgnoreCase("")){
	                    invoice.setPlazoPago(Constantes.CARACTER_ESPACIO);
	               }*/
	               if(invoice.getItemCount()==0 ){
	                    log.debug("No tiene Item, pero no es obligatorio");
	               }
	               else{
	                   //Como si hay items entonces verificamos los campos obligatorios
	                   //log.debug("4");
	                   InvoiceItem item = new InvoiceItem();
	                   // log.debug("5");
	                   for(int i=0;i<invoice.getItemCount();i++){
	                       //log.debug("detalle nro " + i);

	                       item = new InvoiceItem();
	                       item = (InvoiceItem)invoice.getItem(i);

	                       if(item!=null){
//	                           if(item.getNumGuiaItem()==null || item.getNumGuiaItem().toString().trim().equalsIgnoreCase("")){
//	                                log.info(Constantes.ERROR_FACTURA_NUMGUIAITEM);
//	                                invoice.setMensajeError(invoice.getMensajeError()+Constantes.ERROR_FACTURA_NUMGUIAITEM+";");
//	                           }
	                           if(item.getNumeroItemOC()==null || item.getNumeroItemOC().toString().trim().equalsIgnoreCase("")){
	                                log.info(Constantes.ERROR_FACTURA_NUMEROITEMOC);
	                                invoice.setMensajeError(invoice.getMensajeError()+Constantes.ERROR_FACTURA_NUMEROITEMOC+";");
	                           }
	                           if(item.getDescripcionItem()==null || item.getDescripcionItem().toString().trim().equalsIgnoreCase("")){
	                                log.info(Constantes.ERROR_FACTURA_DESCRIPCIONITEM);
	                                invoice.setMensajeError(invoice.getMensajeError()+Constantes.ERROR_FACTURA_DESCRIPCIONITEM+";");
	                           }
	                           if(item.getCantidadItem()==null || item.getCantidadItem().toString().trim().equalsIgnoreCase("")){
	                                log.info(Constantes.ERROR_FACTURA_CANTIDADITEM);
	                                invoice.setMensajeError(invoice.getMensajeError()+Constantes.ERROR_FACTURA_CANTIDADITEM+";");
	                           }
//	                           if(item.getUnidadMedidaItem()==null || item.getUnidadMedidaItem().toString().trim().equalsIgnoreCase("")){
//	                                log.info(Constantes.ERROR_FACTURA_UNIDADMEDIDAITEM);
//	                                invoice.setMensajeError(invoice.getMensajeError()+Constantes.ERROR_FACTURA_UNIDADMEDIDAITEM+";");
//	                           }
	                           if(item.getPrecioUnitario()==null || item.getPrecioUnitario().toString().trim().equalsIgnoreCase("")){
	                                log.info(Constantes.ERROR_FACTURA_PRECIOUNITARIO);
	                                invoice.setMensajeError(invoice.getMensajeError()+Constantes.ERROR_FACTURA_PRECIOUNITARIO+";");
	                           }
	                           if(item.getPrecioTotal()==null || item.getPrecioTotal().toString().trim().equalsIgnoreCase("")){
	                                log.info(Constantes.ERROR_FACTURA_PRECIOTOTAL);
	                                invoice.setMensajeError(invoice.getMensajeError()+Constantes.ERROR_FACTURA_PRECIOTOTAL+";");
	                           }
	                           if(item.getNumeroOCItem()==null || item.getNumeroOCItem().toString().trim().equalsIgnoreCase("")){
	                                log.info(Constantes.ERROR_FACTURA_NUMEROOCITEM);
	                                invoice.setMensajeError(invoice.getMensajeError()+Constantes.ERROR_FACTURA_NUMEROOCITEM+";");
	                           }
	                       }
	                   }
	               }
	           }
	           /*else{
	               log.debug("Error en validar campos obligatorios de Factura");
	           }*/
	           log.debug("Si llega hasta aca entonces retorna la invoice validada");
	           return invoice;
	           
	       }
	       log.debug("Si llega hasta aca entonces el objeto procesado no es una instancia de Factura");
	       return null;
	   }
	 
}
